Do an empty begin_paint_region()/end_paint() for windows without
authorSoeren Sandmann <sandmann@daimi.au.dk>
Mon, 12 Jul 2004 22:52:40 +0000 (22:52 +0000)
committerSøren Sandmann Pedersen <ssp@src.gnome.org>
Mon, 12 Jul 2004 22:52:40 +0000 (22:52 +0000)
Tue Jul 13 00:40:29 2004  Soeren Sandmann  <sandmann@daimi.au.dk>

* gdk/gdkwindow.c (gdk_window_process_updates_internal): Do an
empty begin_paint_region()/end_paint() for windows without
EXPOSURE_MASK.

* gdk/x11/gdkwindow-x11.c (_gdk_x11_window_tmp_unset_bg,
_gdk_x11_window_tmp_reset_bg): Remove checks for EXPOSURE_MASK.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gdk/gdkwindow.c
gdk/x11/gdkwindow-x11.c

index f0b965eac1d8cfa92639d5414c2bb1508efe4bf1..20bed7a7e0aee063a5145e1e12426cb7de5f3812 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Tue Jul 13 00:40:29 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gdk/gdkwindow.c (gdk_window_process_updates_internal): Do an
+       empty begin_paint_region()/end_paint() for windows without
+       EXPOSURE_MASK.
+
+       * gdk/x11/gdkwindow-x11.c (_gdk_x11_window_tmp_unset_bg,
+       _gdk_x11_window_tmp_reset_bg): Remove checks for EXPOSURE_MASK.
+
 2004-07-12  Matthias Clasen  <mclasen@redhat.com>
 
        * demos/gtk-demo/appwindow.c: Use a GtkAboutDialog.
index f0b965eac1d8cfa92639d5414c2bb1508efe4bf1..20bed7a7e0aee063a5145e1e12426cb7de5f3812 100644 (file)
@@ -1,3 +1,12 @@
+Tue Jul 13 00:40:29 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gdk/gdkwindow.c (gdk_window_process_updates_internal): Do an
+       empty begin_paint_region()/end_paint() for windows without
+       EXPOSURE_MASK.
+
+       * gdk/x11/gdkwindow-x11.c (_gdk_x11_window_tmp_unset_bg,
+       _gdk_x11_window_tmp_reset_bg): Remove checks for EXPOSURE_MASK.
+
 2004-07-12  Matthias Clasen  <mclasen@redhat.com>
 
        * demos/gtk-demo/appwindow.c: Use a GtkAboutDialog.
index f0b965eac1d8cfa92639d5414c2bb1508efe4bf1..20bed7a7e0aee063a5145e1e12426cb7de5f3812 100644 (file)
@@ -1,3 +1,12 @@
+Tue Jul 13 00:40:29 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gdk/gdkwindow.c (gdk_window_process_updates_internal): Do an
+       empty begin_paint_region()/end_paint() for windows without
+       EXPOSURE_MASK.
+
+       * gdk/x11/gdkwindow-x11.c (_gdk_x11_window_tmp_unset_bg,
+       _gdk_x11_window_tmp_reset_bg): Remove checks for EXPOSURE_MASK.
+
 2004-07-12  Matthias Clasen  <mclasen@redhat.com>
 
        * demos/gtk-demo/appwindow.c: Use a GtkAboutDialog.
index f0b965eac1d8cfa92639d5414c2bb1508efe4bf1..20bed7a7e0aee063a5145e1e12426cb7de5f3812 100644 (file)
@@ -1,3 +1,12 @@
+Tue Jul 13 00:40:29 2004  Soeren Sandmann  <sandmann@daimi.au.dk>
+
+       * gdk/gdkwindow.c (gdk_window_process_updates_internal): Do an
+       empty begin_paint_region()/end_paint() for windows without
+       EXPOSURE_MASK.
+
+       * gdk/x11/gdkwindow-x11.c (_gdk_x11_window_tmp_unset_bg,
+       _gdk_x11_window_tmp_reset_bg): Remove checks for EXPOSURE_MASK.
+
 2004-07-12  Matthias Clasen  <mclasen@redhat.com>
 
        * demos/gtk-demo/appwindow.c: Use a GtkAboutDialog.
index 7987e650a385f38a48e71b44ea6f7a1c070fe795..c110a1fefe2f0faf5b97307d5b28a28a648193dc 100644 (file)
@@ -2006,10 +2006,8 @@ gdk_window_process_updates_internal (GdkWindow *window)
       GdkRegion *update_area = private->update_area;
       private->update_area = NULL;
       
-      if (_gdk_event_func && gdk_window_is_viewable (window) &&
-         (private->event_mask & GDK_EXPOSURE_MASK))
+      if (_gdk_event_func && gdk_window_is_viewable (window))
        {
-         GdkEvent event;
          GdkRectangle window_rect;
          GdkRegion *expose_region;
          GdkRegion *window_region;
@@ -2022,39 +2020,55 @@ gdk_window_process_updates_internal (GdkWindow *window)
               g_usleep (70000);
             }
           
-          gdk_drawable_get_size (GDK_DRAWABLE (private), &width, &height);
-          
-         window_rect.x = 0;
-         window_rect.y = 0;
-         window_rect.width = width;
-         window_rect.height = height;
-
          save_region = _gdk_windowing_window_queue_antiexpose (window, update_area);
-      
-         event.expose.type = GDK_EXPOSE;
-         event.expose.window = g_object_ref (window);
-         event.expose.count = 0;
 
          if (save_region)
            expose_region = gdk_region_copy (update_area);
          else
            expose_region = update_area;
+         
+          gdk_drawable_get_size (GDK_DRAWABLE (private), &width, &height);
+
+         window_rect.x = 0;
+         window_rect.y = 0;
+         window_rect.width = width;
+         window_rect.height = height;
+
          window_region = gdk_region_rectangle (&window_rect);
          gdk_region_intersect (expose_region,
                                window_region);
          gdk_region_destroy (window_region);
          
-         event.expose.region = expose_region;
-         gdk_region_get_clipbox (expose_region, &event.expose.area);
-         
          if (!gdk_region_empty (expose_region))
            {
-             (*_gdk_event_func) (&event, _gdk_event_data);
+             if (private->event_mask & GDK_EXPOSURE_MASK)
+               {
+                 GdkEvent event;
+             
+                 event.expose.type = GDK_EXPOSE;
+                 event.expose.window = g_object_ref (window);
+                 event.expose.count = 0;
+                 event.expose.region = expose_region;
+                 gdk_region_get_clipbox (expose_region, &event.expose.area);
+                 
+                 (*_gdk_event_func) (&event, _gdk_event_data);
+
+                 g_object_unref (window);
+               }
+             else
+               {
+                 /* Windows without GDK_EXPOSURE_MASK still need to
+                  * get their backgrounds painted, because it
+                  * may have been temporarily set to None when
+                  * the expose was generated
+                  */
+                 gdk_window_begin_paint_region (window, expose_region);
+                 gdk_window_end_paint (window);
+               }
            }
 
          if (expose_region != update_area)
            gdk_region_destroy (expose_region);
-         g_object_unref (window);
        }
       if (!save_region)
        gdk_region_destroy (update_area);
index f8ef65ac4cc9a2c6a74247f4cc454979b5129622..7a899102eff1a188670b767c6bc2a958b84b284a 100644 (file)
@@ -284,13 +284,8 @@ _gdk_x11_window_tmp_unset_bg (GdkWindow *window,
       return;
     }
 
-  /* Don't unset the background of windows that don't select for expose
-   * events. Such windows don't get drawn, so we need the X server
-   * drawing them to prevent them from containing garbage
-   */
   if (private->window_type != GDK_WINDOW_ROOT &&
-      private->window_type != GDK_WINDOW_FOREIGN &&
-      (private->event_mask & GDK_EXPOSURE_MASK))
+      private->window_type != GDK_WINDOW_FOREIGN)
     {
       tmp_unset_bg (window);
     }
@@ -322,8 +317,7 @@ _gdk_x11_window_tmp_reset_bg (GdkWindow *window,
     }
 
   if (private->window_type != GDK_WINDOW_ROOT &&
-      private->window_type != GDK_WINDOW_FOREIGN &&
-      (private->event_mask & GDK_EXPOSURE_MASK))
+      private->window_type != GDK_WINDOW_FOREIGN)
     {
       tmp_reset_bg (window);
     }